/*	Hier wird FlakBullet zum Spawnen eingefuegt
Drag-And-Drop des getraillerten Prefab! */
var myProjectile : GameObject;
/* Zeit in Sekunden zum Nachladen der Flak */
var reloadTime : float = 0.1f;
/*	Drehgeschwindigkeit der Flak */
var turnSpeed : float = 10f;
/* 	Zusaetzliche Variable zum Innehalten (Zielpause)
vor dem Schiessen fuer mehr Realisums */
var firePauseTime : float = 0f;
var muzzlePositions : Transform[];
/*	Hier wird Small Explosion eingefuegt */
var muzzleEffect : GameObject;

/*	Legt fest worauf gezielt wird */
var myTarget : Transform;

private var nextFireTime : float;

/* Besonderheiten der Flak-Steuerung */
var pivot_Tilt : Transform;
var pivot_Pan : Transform;
// Hilfs-Null-Objekte im Modell
var aim_Tilt : Transform;
var aim_Pan : Transform;

function Start() {}

function Update() {

	/* Falls ich ein Ziel habe (myTarget != null)*/
	if (myTarget) {
		/* aim_Pan soll sich nach dem Ziel ausrichten */
		aim_Pan.LookAt(myTarget);
		/* Aber nur in der Drehung um die Y-Achsem, also beide anderen wieder auf 0 setzen */
		aim_Pan.eulerAngles = Vector3(0, aim_Pan.eulerAngles.y, 0);
		/* Dasselbe fuer Tilt nur das man hier nichts aendern muss, weil es durch das Parenting schon richtig liegt*/
		aim_Tilt.LookAt(myTarget);

		/* Jetzt auf die tatsächlichen Objekte uebertragen (wie bei Artillery...)*/
		pivot_Pan.rotation = Quaternion.Lerp(pivot_Pan.rotation, aim_Pan.rotation, Time.deltaTime * turnSpeed);
		pivot_Tilt.rotation = Quaternion.Lerp(pivot_Tilt.rotation, aim_Tilt.rotation, Time.deltaTime * turnSpeed);

		/* Falls wieder geschossen werden darf. Groesser falls was kurz hing. */
		if (Time.time >= nextFireTime) {
			/* Feuer!*/
			FireProjectile();
		}
	}
}
/* 	Diese Funktion wird automatisch ausgefuehrt sobald
etwas in die innere Reichweite des Colliders gelangt */
function OnTriggerStay(feind : Collider) // Stay anstelle von Aendern, damit konstant und nicht nur bei Eintritt!
{
	if (!myTarget) { // Durch Stay notwendig: Nur falls noch kein Ziel vorhanden!
		/*	Falls es sich um einen Gegner handelt*/
		if (feind.gameObject.tag == "Enemy_Air" || feind.gameObject.tag == "Enemy_Ground") {
			/*	Zeit gewinnen, damit nicht bei direkt bei
			Feinderkennung losgefeuert wird */
			nextFireTime = Time.time + (reloadTime * 1.5);
			/* bis transform als Ziel setzen damit man danach
			mit myTarget.position ansprechen kann*/
			myTarget = feind.gameObject.transform;
		}
	}
}

/*	Ziel loslassen */
function OnTriggerExit(feind : Collider) {
	if (feind.gameObject.transform == myTarget) {
		myTarget = null;
	}
}

/* Schuss */
function FireProjectile() {
	/*	Sound abspielen */
	audio.Play();
	/*Zuerst die Zeit neu einstellen! Aktueller Zeitpunkt + Nachladezeit*/
	nextFireTime = Time.time + reloadTime;

	/* Fuer jeden Emitterpunkt Bullet und Explosion erzeugen*/
	for (theMuzzlePos in muzzlePositions) {
		/*	Projektil instanziieren*/
		Instantiate(myProjectile, theMuzzlePos.position, theMuzzlePos.rotation);
		/*	Explosionsemitter instanziieren*/
		Instantiate(muzzleEffect, theMuzzlePos.position, theMuzzlePos.rotation);
	}
}
